#!/bin/bash

# This shell-script will install the latest version of
# nfcollector to your system & has some system requirements including
# docker, docker-compose, wget. If not satisfied, will help you install
# them using a guide printed in the terminal
# Check more about it's usage at: https://github.com/javadmohebbi/goNfCollector

# The version: v0.0.1-30b
# BETA VERSION
# Author: M. Javad Mohebi
# Github: https://github.com/javadmohebbi
# Dockerhub: https://hub.docker.com/u/javadmohebbi
# Website: https://openintelligence24.com

# change the color of echo output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
NC='\033[0m' # No Color

COMPOSE_PROJECT_NAME="oi24"

# RANDOM QUERY STRING FOR PREVENTING CACHE
RAND_STR=$(date | md5sum | cut -d" " -f1)

## This VARIABLES are exported because of
## nfupdater commad. This command needs some of them
## Don't panic, this env vars are temparary & will no longer exist if
## you re-open the Terminal
## ;-)

# PROJECT DIR
export PROJECT_DIR=$HOME/oi24/nfcollector

# USER ID
export USER_ID=$(id -u)

# Listen address
export NFC_LISTEN_ADDRESS="0.0.0.0"

# total number of used cpu
export NFC_CPU_NUM="0"

export NFC_LISTEN_PORT="6859"
export NFC_INFLUXDB_HOST="influxdb"
export NFC_INFLUXDB_PORT="8086"
export NFC_INFLUXDB_TOKEN="5vqt0q0b4g_lZwNgp7-8GgPq5Nxf3YY37xbVZP_ypeK_G3dwdNlTrAkcKN_Q6QzbmG-Th96lT_65Kp0j2UD1HA=="
export NFC_INFLUXDB_BUCKET="nfCollector"
export NFC_INFLUXDB_ORG="OPENINTELLIGENCE"
export NFC_IP_REPTATION_IPSUM="$PROJECT_DIR/vendors/ipsum/ipsum.txt"
# added in v0.0.1-30b for replacing config in dockerize deployment automaticaly
export REPLACING_NFC_IP_REPTATION_IPSUM="/opt/nfcollector/vendors/ipsum/ipsum.txt"

export NFC_IP2L_ASN="$PROJECT_DIR/vendors/ip2location/db/IP2LOCATION-LITE-ASN.IPV6.CSV/IP2LOCATION-LITE-ASN.IPV6.CSV"
# added in v0.0.1-30b for replacing config in dockerize deployment automaticaly
export REPLACING_NFC_IP2L_ASN="/opt/nfcollector/vendors/ip2location/db/IP2LOCATION-LITE-ASN.IPV6.CSV/IP2LOCATION-LITE-ASN.IPV6.CSV"

export NFC_IP2L_IP="$PROJECT_DIR/vendors/ip2location/db/IP2LOCATION-LITE-DB11.IPV6.BIN/IP2LOCATION-LITE-DB11.IPV6.BIN"
# added in v0.0.1-30b for replacing config in dockerize deployment automaticaly
export REPLACING_NFC_IP2L_IP="/opt/nfcollector/vendors/ip2location/db/IP2LOCATION-LITE-DB11.IPV6.BIN/IP2LOCATION-LITE-DB11.IPV6.BIN"

export NFC_IP2L_PROXY="$PROJECT_DIR/vendors/ip2location/db/IP2PROXY-LITE-PX10.IPV6.CSV/IP2PROXY-LITE-PX10.IPV6.CSV"
# added in v0.0.1-30b for replacing config in dockerize deployment automaticaly
export REPLACING_NFC_IP2L_PROXY="/opt/nfcollector/vendors/ip2location/db/IP2PROXY-LITE-PX10.IPV6.CSV/IP2PROXY-LITE-PX10.IPV6.CSV"

export NFC_IP2L_LOCAL="$PROJECT_DIR/vendors/ip2location/local-db/local.csv"
# added in v0.0.1-30b for replacing config in dockerize deployment automaticaly
export REPLACING_NFC_IP2L_LOCAL="/opt/nfcollector/vendors/ip2location/local-db/local.csv"

# InfluxDB DIR
export INFLUX_DIR=$PROJECT_DIR/vendors/influxdb

# Grafana DIR
export GRAFANA_DIR=$PROJECT_DIR/vendors/grafana

# error check and stop on error
check_errors() {
    e=$?
    if [ "${e}" -ne "0" ]; then
        echo -e "${RED} [ERROR] Could not continue due to error. Check the above information to solve the issue".
        exit 1
    fi
}

replace_compose_template() {
    echo ""
    echo -e "${YELLOW} Preparing docker-compose.yml file...${NC}"

    PWD_ESCP=$(echo $INFLUX_DIR | sed 's_/_\\/_g')
    sed -i "s/_INFLUX_DIR_/$PWD_ESCP/g" ./docker-compose.yml
    check_errors

    PWD_ESCP=$(echo $GRAFANA_DIR | sed 's_/_\\/_g')
    sed -i "s/_GRAFANA_DIR_/$PWD_ESCP/g" ./docker-compose.yml
    check_errors

    PWD_ESCP=$(echo $PROJECT_DIR | sed 's_/_\\/_g')
    sed -i "s/_PROJECT_DIR_/$PWD_ESCP/g" ./docker-compose.yml
    check_errors

    sed -i "s/_NFC_CPU_NUM_/$NFC_CPU_NUM/g" ./docker-compose.yml
    check_errors

    sed -i "s/_NFC_LISTEN_ADDRESS_/$NFC_LISTEN_ADDRESS/g" ./docker-compose.yml
    check_errors
    sed -i "s/_NFC_LISTEN_PORT_/$NFC_LISTEN_PORT/g" ./docker-compose.yml
    check_errors
    sed -i "s/_NFC_INFLUXDB_HOST_/$NFC_INFLUXDB_HOST/g" ./docker-compose.yml
    check_errors
    sed -i "s/_NFC_INFLUXDB_PORT_/$NFC_INFLUXDB_PORT/g" ./docker-compose.yml
    check_errors
    sed -i "s/_NFC_INFLUXDB_TOKEN_/$NFC_INFLUXDB_TOKEN/g" ./docker-compose.yml
    check_errors
    sed -i "s/_NFC_INFLUXDB_BUCKET_/$NFC_INFLUXDB_BUCKET/g" ./docker-compose.yml
    check_errors
    sed -i "s/_NFC_INFLUXDB_ORG_/$NFC_INFLUXDB_ORG/g" ./docker-compose.yml
    check_errors

    mv ./docker-compose.yml $PROJECT_DIR/docker-compose.yml -v
    check_errors

    echo -e "${GRREN}...done!${NC}"
}

replace_collector_template() {

    conf=${PROJECT_DIR}/etc/collector.yml

    echo ""
    echo -e "${YELLOW} Preparing ${conf} file...${NC}"

    PWD_ESCP=$(echo "/opt/nfcollector/var/collector.log" | sed 's_/_\\/_g')
    sed -i "s/_LOG_PATH_/$PWD_ESCP/g" $conf
    check_errors

    sed -i "s/_NFC_CPU_NUM_/$NFC_CPU_NUM/g" $conf
    check_errors

    sed -i "s/_NFC_LISTEN_ADDRESS_/$NFC_LISTEN_ADDRESS/g" $conf
    check_errors
    sed -i "s/_NFC_LISTEN_PORT_/$NFC_LISTEN_PORT/g" $conf
    check_errors

    # changed in v0.0.1-b30
    #PWD_ESCP=$(echo ${NFC_IP_REPTATION_IPSUM} | sed 's_/_\\/_g')
    PWD_ESCP=$(echo ${REPLACING_NFC_IP_REPTATION_IPSUM} | sed 's_/_\\/_g')
    sed -i "s/_NFC_IP_REPTATION_IPSUM_/$PWD_ESCP/g" $conf
    check_errors

    sed -i "s/_NFC_INFLUXDB_HOST_/$NFC_INFLUXDB_HOST/g" $conf
    check_errors
    sed -i "s/_NFC_INFLUXDB_PORT_/$NFC_INFLUXDB_PORT/g" $conf
    check_errors
    sed -i "s/_NFC_INFLUXDB_TOKEN_/$NFC_INFLUXDB_TOKEN/g" $conf
    check_errors
    sed -i "s/_NFC_INFLUXDB_BUCKET_/$NFC_INFLUXDB_BUCKET/g" $conf
    check_errors
    sed -i "s/_NFC_INFLUXDB_ORG_/$NFC_INFLUXDB_ORG/g" $conf
    check_errors

    echo -e "${GRREN}...done!${NC}"
}

replace_location_template() {

    conf=${PROJECT_DIR}/etc/ip2location.yml

    echo ""
    echo -e "${YELLOW} Preparing ${conf} file...${NC}"

    # changed in v0.0.1-b30
    #PWD_ESCP=$(echo $NFC_IP2L_ASN | sed 's_/_\\/_g')
    PWD_ESCP=$(echo $REPLACING_NFC_IP2L_ASN | sed 's_/_\\/_g')
    sed -i "s/_NFC_IP2L_ASN_/$PWD_ESCP/g" $conf
    check_errors

    # changed in v0.0.1-b30
    # PWD_ESCP=$(echo $NFC_IP2L_IP | sed 's_/_\\/_g')
    PWD_ESCP=$(echo $REPLACING_NFC_IP2L_IP | sed 's_/_\\/_g')
    sed -i "s/_NFC_IP2L_IP_/$PWD_ESCP/g" $conf
    check_errors

    # changed in v0.0.1-b30
    # PWD_ESCP=$(echo $NFC_IP2L_PROXY | sed 's_/_\\/_g')
    PWD_ESCP=$(echo $REPLACING_NFC_IP2L_PROXY | sed 's_/_\\/_g')
    sed -i "s/_NFC_IP2L_PROXY_/$PWD_ESCP/g" $conf
    check_errors

    # changed in v0.0.1-b30
    # PWD_ESCP=$(echo $NFC_IP2L_LOCAL | sed 's_/_\\/_g')
    PWD_ESCP=$(echo $REPLACING_NFC_IP2L_LOCAL | sed 's_/_\\/_g')
    sed -i "s/_NFC_IP2L_LOCAL_/$PWD_ESCP/g" $conf
    check_errors

    echo -e "${GRREN}...done!${NC}"
}

#rename compose & other templates
replace_compose_template
replace_collector_template
replace_location_template

echo ""
echo -e "${NC}= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = "
echo ""
echo -e "${NC}Information you need to know:"
echo -e "\n\t${GREEN} Project Directory: ${YELLOW}${PROJECT_DIR}"

echo -e "\n\t${GREEN} InfluxDB:"
echo -e "\t\t${NC} address:${YELLOW}${NFC_INFLUXDB_HOST}:${NFC_INFLUXDB_PORT}"
echo -e "\t\t${NC} token:${YELLOW}${NFC_INFLUXDB_TOKEN}"
echo -e "\t\t${NC} Web UI Credentials:"
echo -e "\t\t\t${NC} username: ${YELLOW}admin"
echo -e "\t\t\t${NC} password: ${YELLOW}influx_admin_secret"
echo -e "\n\t${GREEN} Grafana:"
echo -e "\t\t${NC} address:${YELLOW}127.0.0.1:3000"
echo -e "\t\t${NC} Web UI Credentials:"
echo -e "\t\t\t${NC} username: ${YELLOW}admin"
echo -e "\t\t\t${NC} password: ${YELLOW}secret"

echo -e "\n\t${GREEN} nfcollector:"
echo -e "\t\t${NC} address:${YELLOW}${NFC_LISTEN_ADDRESS}:${NFC_LISTEN_PORT}(udp)"

echo ""
echo -e "${YELLOW}- - - - - - - - - - - - - - - - "
echo ""
echo -e " ${YELLOW}To start containers:"
echo -e " ${NC}\$ ${GREEN}cd ${PROJECT_DIR} && docker-compose up -d${NC}"
echo -e " ${YELLOW}To stop containers:"
echo -e " ${NC}\$ ${GREEN}cd ${PROJECT_DIR} && docker-compose down${NC}"
echo ""
echo -e "${YELLOW}- - - - - - - - - - - - - - - - "
echo ""
echo ""

echo -e "${NC}"
